/**
 * 开发环境（.env.development）中，baseURL 默认值和其他的 URL 前缀通常被配置为绝对路径
 *   VITE_APP_BASE_API = 'https://xxx'
 *   VITE_APP_XXX_API = 'https://xxx'
 *
 *   this.$POST(import.meta.env.VITE_APP_XXX_API + 'xxx')
 *     调用接口时，config.url 为绝对路径，baseURL 不会生效
 *     url 最终被解析为 VITE_APP_XXX_API + 后缀
 *
 * 正式环境（.env.production）中，baseURL 默认值和其他的 URL 前缀可能被配置为相对路径
 *   VITE_APP_BASE_API = '/xxx'
 *   VITE_APP_XXX_API = '/xxx'
 *
 *   this.$POST(import.meta.env.VITE_APP_XXX_API + 'xxx')
 *     调用接口时，config.url 为相对路径，baseURL 生效
 *     url 最终被解析为 window.origin + VITE_APP_BASE_API + VITE_APP_XXX_API + 后缀
 *     所以此时需要将 baseURL 手动置空
 *
 * 为了使该方法生效，dotenv 文件中的 URL 前缀必须以 '_API' 结尾
 */

 function isRelativeURL(path) {
  return path.startsWith('.') || (path.startsWith('/') && !path.startsWith('//'))
}

// 非 baseURL 的其他 URL 前缀
const urlPrefixWithoutBaseURL = []

if (import.meta.env.MODE !== 'development') {
  for (const k in import.meta.env) {
    if (
      k !== 'VITE_APP_BASE_API' && k.startsWith('VITE_APP_') && k.endsWith('_API') &&
      // 相对路径
      isRelativeURL(import.meta.env[k])
    ) {
      urlPrefixWithoutBaseURL.push(import.meta.env[k])
    }
  }
}

export default import.meta.env.MODE === 'development' ?
  () => { } : config => {
    // config.url 使用了配置文件中的其他 URL 前缀，且该前缀为相对路径
    if (urlPrefixWithoutBaseURL.some(v => config.url.startsWith(v))) {
      // 手动置空 baseURL，防止 baseURL 被拼接到前面
      config.baseURL = ''
    }
  }
